package com.example.demo.service;

import com.example.demo.dto.NewTaskDTO;
import com.example.demo.dto.DataSourceTaskStatsDTO;
import com.example.demo.dto.TaskDetailDTO;
import com.example.demo.dto.DataSourceSearchConfigDTO;
import com.example.demo.entity.NewTask;
import com.example.demo.request.CreateNewTaskRequest;
import java.util.List;
import com.example.demo.request.SearchNewTaskRequest;

public interface NewTaskService {

    /**
     * 分页查询任务列表
     */
    List<NewTaskDTO> getNewTasks(int page, int size, Long dataSourceId, Integer isAssigned);

    /**
     * 统计任务总数
     */
    long countNewTasks(Long dataSourceId, Integer isAssigned);

    /**
     * 根据ID查询任务详情
     */
    NewTaskDTO getNewTaskById(Long id);

    /**
     * 根据业务唯一ID查询任务
     */
    NewTaskDTO getNewTaskByBizUniqueId(String bizUniqueId);

    /**
     * 创建新任务
     */
    NewTaskDTO createNewTask(CreateNewTaskRequest request);

    /**
     * 更新任务
     */
    NewTaskDTO updateNewTask(Long id, CreateNewTaskRequest request);

    /**
     * 删除任务
     */
    void deleteNewTask(Long id);

    /**
     * 更新任务分配状态
     */
    void updateNewTaskAssignedStatus(Long id, Integer isAssigned);

    /**
     * 更新任务完成状态
     */
    void updateNewTaskCompleteStatus(Long id, Integer isComplete);

    /**
     * 从数据源同步任务数据
     */
    int syncTasksFromDataSource(Long dataSourceId);

    /**
     * 批量插入任务数据
     */
    int insertBatchTasks(List<NewTask> tasks);

    /**
     * 获取所有数据源的任务统计信息
     */
    List<DataSourceTaskStatsDTO> getAllDataSourceTaskStats();

    /**
     * 获取指定数据源的任务统计信息
     */
    DataSourceTaskStatsDTO getDataSourceTaskStatsById(Long dataSourceId);

    /**
     * 获取任务详细信息
     * 包含rawData和extraFields的合并数据，按displayFields过滤
     */
    TaskDetailDTO getTaskDetail(Long taskId);

    /**
     * 分页查询任务详情列表（带displayFields过滤）
     * 包含rawData和extraFields的合并数据，按displayFields过滤
     */
    List<TaskDetailDTO> getTaskDetails(int page, int size, Long dataSourceId, Integer isAssigned);

    /**
     * 获取数据源搜索配置信息
     */
    DataSourceSearchConfigDTO getDataSourceSearchConfig(Long dataSourceId);

    /**
     * 搜索任务（支持JSON字段搜索）
     * @param request 搜索请求参数
     * @return 任务详情列表
     */
    List<TaskDetailDTO> searchNewTasks(SearchNewTaskRequest request);

    /**
     * 统计搜索结果数量
     * @param request 搜索请求参数
     * @return 符合条件的任务数量
     */
    long countSearchNewTasks(SearchNewTaskRequest request);

}